<template><div><p>本文档最新版为 <a href="https://learnku.com/docs/laravel/10.x" target="_blank" rel="noopener noreferrer">10.x</a>，旧版本可能放弃维护，推荐阅读最新版！</p>
<h2 id="目录结构" tabindex="-1"><a class="header-anchor" href="#目录结构"><span>目录结构</span></a></h2>
<ul>
<li><a href="#introduction">简介</a></li>
<li><a href="#the-root-directory">根目录</a>
<ul>
<li><a href="#the-root-app-directory"><code v-pre>app</code> 目录</a></li>
<li><a href="#the-bootstrap-directory"><code v-pre>bootstrap</code> 目录</a></li>
<li><a href="#the-config-directory"><code v-pre>config</code> 目录</a></li>
<li><a href="#the-database-directory"><code v-pre>database</code> 目录</a></li>
<li><a href="#the-public-directory"><code v-pre>public</code> 目录</a></li>
<li><a href="#the-resources-directory"><code v-pre>resources</code> 目录</a></li>
<li><a href="#the-routes-directory"><code v-pre>routes</code> 目录</a></li>
<li><a href="#the-storage-directory"><code v-pre>storage</code> 目录</a></li>
<li><a href="#the-tests-directory"><code v-pre>tests</code> 目录</a></li>
<li><a href="#the-vendor-directory"><code v-pre>vendor</code> 目录</a></li>
</ul>
</li>
<li><a href="#the-app-directory">App 目录</a>
<ul>
<li><a href="#the-broadcasting-directory"><code v-pre>Broadcasting</code> 目录</a></li>
<li><a href="#the-console-directory"><code v-pre>Console</code> 目录</a></li>
<li><a href="#the-events-directory"><code v-pre>Events</code> 目录</a></li>
<li><a href="#the-exceptions-directory"><code v-pre>Exceptions</code> 目录</a></li>
<li><a href="#the-http-directory"><code v-pre>Http</code> 目录</a></li>
<li><a href="#the-jobs-directory"><code v-pre>Jobs</code> 目录</a></li>
<li><a href="#the-listeners-directory"><code v-pre>Listeners</code> 目录</a></li>
<li><a href="#the-mail-directory"><code v-pre>Mail</code> 目录</a></li>
<li><a href="#the-models-directory"><code v-pre>Models</code> 目录</a></li>
<li><a href="#the-notifications-directory"><code v-pre>Notifications</code> 目录</a></li>
<li><a href="#the-policies-directory"><code v-pre>Policies</code> 目录</a></li>
<li><a href="#the-providers-directory"><code v-pre>Providers</code> 目录</a></li>
<li><a href="#the-rules-directory"><code v-pre>Rules</code> 目录</a></li>
</ul>
</li>
</ul>
<h2 id="简介" tabindex="-1"><a class="header-anchor" href="#简介"><span>简介</span></a></h2>
<p>Laravel 应用程序的默认结构旨在为大型和小型应用程序提供一个出色的起点。但是，你可以自由地按照自己的喜好组织应用程序。Laravel 几乎不对任何给定类的位置施加限制 - 只要 Composer 能够自动加载该类。</p>
<blockquote>
<p><strong>注意</strong><br>
初次使用 Laravel？请查看 <a href="https://bootcamp.laravel.com/" target="_blank" rel="noopener noreferrer">Laravel Bootcamp</a> 以获得该框架的实战指南，同时我们将帮助你构建你的第一个 Laravel 应用。</p>
</blockquote>
<h2 id="根目录" tabindex="-1"><a class="header-anchor" href="#根目录"><span>根目录</span></a></h2>
<h4 id="app-目录" tabindex="-1"><a class="header-anchor" href="#app-目录"><span>App 目录</span></a></h4>
<p><code v-pre>app</code> 目录包含应用程序的核心代码。我们很快将详细探讨这个目录；但是，你的应用程序中几乎所有的类都将在此目录中。</p>
<h4 id="bootstrap-目录" tabindex="-1"><a class="header-anchor" href="#bootstrap-目录"><span>Bootstrap 目录</span></a></h4>
<p><code v-pre>bootstrap</code> 目录包含 <code v-pre>app.php</code> 文件，该文件负责启动框架。此目录还包含一个 <code v-pre>cache</code> 目录，其中包含用于性能优化的框架生成的文件，例如路由和服务缓存文件。</p>
<h4 id="config-目录" tabindex="-1"><a class="header-anchor" href="#config-目录"><span>Config 目录</span></a></h4>
<p>顾名思义，<code v-pre>config</code> 目录包含了应用程序的所有配置文件。阅读所有这些文件并熟悉可用的选项是个好主意。</p>
<h4 id="database-目录" tabindex="-1"><a class="header-anchor" href="#database-目录"><span>Database 目录</span></a></h4>
<p><code v-pre>database</code> 目录包含您的数据库迁移、模型工厂和种子。如果您愿意，您还可以使用此目录来存放 SQLite 数据库。</p>
<h4 id="public-目录" tabindex="-1"><a class="header-anchor" href="#public-目录"><span>Public 目录</span></a></h4>
<p><code v-pre>public</code> 目录包含 <code v-pre>index.php</code> 文件，这是所有进入应用程序请求的入口点，并配置自动加载。此目录还存放您的资源，如图片、JavaScript 和 CSS。</p>
<h4 id="resources-目录" tabindex="-1"><a class="header-anchor" href="#resources-目录"><span>Resources 目录</span></a></h4>
<p><code v-pre>resources</code> 目录包含您的 <a href="https://learnku.com/docs/laravel/11.x/views" target="_blank" rel="noopener noreferrer">视图</a> 以及未编译的原始资源，如 CSS 或 JavaScript。</p>
<h4 id="routes-目录" tabindex="-1"><a class="header-anchor" href="#routes-目录"><span>Routes 目录</span></a></h4>
<p><code v-pre>routes</code> 目录包含了应用程序的所有路由定义。默认情况下，Laravel 包含两个路由文件：<code v-pre>web.php</code> 和 <code v-pre>console.php</code>。<br>
<code v-pre>web.php</code> 文件包含 Laravel 放在 <code v-pre>web</code> 中间件组中的路由，提供会话状态、CSRF保护和 cookie 加密。如果您的应用程序不提供无状态的 RESTful API，那么您的所有路由很可能都会定义在 <code v-pre>web.php</code> 文件中。</p>
<p><code v-pre>console.php</code> 文件是您可以定义所有基于闭包的控制台命令的地方。每个闭包都绑定到一个命令实例，允许以简单的方式与每个命令的IO方法交互。尽管这个文件没有定义HTTP路由，但它定义了基于控制台的进入应用程序的入口点（路由）。您还可以在 <code v-pre>console.php</code> 文件中 <a href="https://learnku.com/docs/laravel/11.x/scheduling" target="_blank" rel="noopener noreferrer">计划</a> 任务。<br>
可选地，您可以通过 <code v-pre>install:api</code> 和 <code v-pre>install:broadcasting</code> Artisan命令安装额外的路由文件，用于API路由（<code v-pre>api.php</code>）和广播频道（<code v-pre>channels.php</code>）。<br>
<code v-pre>api.php</code> 文件包含意图无状态的路线，因此通过这些路由进入应用程序的请求意图通过 <a href="https://learnku.com/docs/laravel/11.x/sanctum" target="_blank" rel="noopener noreferrer">token</a> 进行身份验证，并且无法访问会话状态。<br>
<code v-pre>channels.php</code> 文件是您可以注册应用程序支持的所有 <a href="https://learnku.com/docs/laravel/11.x/broadcasting" target="_blank" rel="noopener noreferrer">事件广播</a> 频道的地方。</p>
<h4 id="storage-目录" tabindex="-1"><a class="header-anchor" href="#storage-目录"><span>Storage 目录</span></a></h4>
<p><code v-pre>storage</code> 目录包含您的日志、编译的Blade模板、基于文件的会话、文件缓存以及框架生成的其他文件。这个目录被分为 <code v-pre>app</code>、<code v-pre>framework</code> 和 <code v-pre>logs</code> 目录。<code v-pre>app</code> 目录可用于存储应用程序生成的任何文件。<code v-pre>framework</code> 目录用于存储框架生成的文件和缓存。最后，<code v-pre>logs</code> 目录包含您的应用程序日志文件。<br>
<code v-pre>storage/app/public</code> 目录可用于存储应公开访问的用户生成文件，例如个人资料头像。您应该在 <code v-pre>public/storage</code> 创建一个指向此目录的符号链接。您可以使用 <code v-pre>php artisan storage:link</code> Artisan 命令创建链接。</p>
<h4 id="tests-目录" tabindex="-1"><a class="header-anchor" href="#tests-目录"><span>Tests 目录</span></a></h4>
<p><code v-pre>tests</code> 目录包含你的自动化测试。默认情况下提供了 <a href="https://pestphp.com/" target="_blank" rel="noopener noreferrer">Pest</a> 或 <a href="https://phpunit.de/" target="_blank" rel="noopener noreferrer">PHPUnit</a> 单元测试和功能测试示例。每个测试类应以 <code v-pre>Test</code> 单词为后缀。你可以使用 <code v-pre>/vendor/bin/pest</code> 或 <code v-pre>/vendor/bin/phpunit</code> 命令运行测试。或者，如果你希望对测试结果有更详细和美观的表示，你可以使用 <code v-pre>php artisan test</code> Artisan 命令运行测试。</p>
<h4 id="vendor-目录" tabindex="-1"><a class="header-anchor" href="#vendor-目录"><span>Vendor 目录</span></a></h4>
<p><code v-pre>vendor</code> 目录包含您的 <a href="https://getcomposer.org/" target="_blank" rel="noopener noreferrer">Composer</a> 依赖项。</p>
<h2 id="app-目录-1" tabindex="-1"><a class="header-anchor" href="#app-目录-1"><span>App 目录</span></a></h2>
<p>你应用程序的大部分内容都位于 <code v-pre>app</code> 目录中。默认情况下，此目录在 <code v-pre>App</code> 命名空间下，并通过 Composer 使用 <a href="https://www.php-fig.org/psr/psr-4/" target="_blank" rel="noopener noreferrer">PSR-4 自动加载标准</a> 自动加载。</p>
<p>默认情况下，<code v-pre>app</code> 目录包含 <code v-pre>Http</code>、<code v-pre>Models</code> 和 <code v-pre>Providers</code> 目录。然而，随着时间的推移，当你使用 make Artisan 命令生成类时，<code v-pre>app</code> 目录内将生成各种其他目录。例如，直到你执行 <code v-pre>make:command</code> Artisan 命令生成命令类时，<code v-pre>app/Console</code> 目录才会存在。</p>
<p><code v-pre>Console</code> 和 <code v-pre>Http</code> 目录将在下面的各自部分中进一步解释，但可以将 <code v-pre>Console</code> 和 <code v-pre>Http</code> 目录视为提供进入应用程序核心的 API。HTTP 协议和 CLI 都是与应用程序交互的机制，但实际上不包含应用程序逻辑。换句话说，它们是向应用程序发出命令的两种方式。<code v-pre>Console</code> 目录包含所有的 Artisan 命令，而 <code v-pre>Http</code> 目录包含你的控制器、中间件和请求。</p>
<blockquote>
<p><strong>技巧</strong><br>
<code v-pre>app</code> 目录中的许多类可以由 Artisan 通过命令生成。 要查看可用命令，请在终端中运行 <code v-pre>php artisan list make</code> 命令。</p>
</blockquote>
<h4 id="broadcasting-目录" tabindex="-1"><a class="header-anchor" href="#broadcasting-目录"><span>Broadcasting 目录</span></a></h4>
<p><code v-pre>Broadcasting</code> 目录包含应用程序的所有广播频道类。这些类是使用 <code v-pre>make:channel</code> 命令生成的。默认情况下，该目录不存在，但在创建第一个频道时会为你生成。要了解更多关于频道的信息，请查看 <a href="https://laravel.com/docs/11.x/broadcasting" target="_blank" rel="noopener noreferrer">事件广播</a> 的文档。</p>
<h4 id="console-目录" tabindex="-1"><a class="header-anchor" href="#console-目录"><span>Console 目录</span></a></h4>
<p><code v-pre>Console</code> 目录包含应用程序的所有自定义 Artisan 命令。这些命令可以使用 <code v-pre>make:command</code> 命令生成。</p>
<h4 id="events-目录" tabindex="-1"><a class="header-anchor" href="#events-目录"><span>Events 目录</span></a></h4>
<p>默认情况下，该目录不存在，但可以通过 <code v-pre>event:generate</code> 和 <code v-pre>make:event</code> Artisan 命令为你生成。<code v-pre>Events</code> 目录存储 <a href="https://laravel.com/docs/11.x/events" target="_blank" rel="noopener noreferrer">事件类</a>。事件可用于通知应用程序的其他部分某个特定操作已发生，从而提供了很大的灵活性和解耦性。</p>
<h4 id="exceptions-目录" tabindex="-1"><a class="header-anchor" href="#exceptions-目录"><span>Exceptions 目录</span></a></h4>
<p><code v-pre>Exceptions</code> 目录包含应用程序的所有自定义异常。这些异常可以使用 <code v-pre>make:exception</code> 命令生成。</p>
<h4 id="http-目录" tabindex="-1"><a class="header-anchor" href="#http-目录"><span>Http 目录</span></a></h4>
<p><code v-pre>Http</code> 目录包含你的控制器、中间件和表单请求。几乎所有处理进入应用程序请求的逻辑都将放在这个目录中。</p>
<h4 id="jobs-目录" tabindex="-1"><a class="header-anchor" href="#jobs-目录"><span>Jobs 目录</span></a></h4>
<p>默认情况下，该目录不存在，但如果你执行 <code v-pre>make:job</code> Artisan 命令，它将为你生成。<code v-pre>Jobs</code> 目录存储应用程序的 <a href="https://laravel.com/docs/11.x/queues" target="_blank" rel="noopener noreferrer">队列任务</a>。这些任务可以由应用程序排队或在当前请求的生命周期内同步运行。在当前请求期间同步运行的任务有时被称为「命令」，因为它们是 <a href="https://en.wikipedia.org/wiki/Command_pattern" target="_blank" rel="noopener noreferrer">命令模式</a> 的实现。</p>
<h4 id="listeners-目录" tabindex="-1"><a class="header-anchor" href="#listeners-目录"><span>Listeners 目录</span></a></h4>
<p>默认情况下，该目录不存在，但可以通过执行 <code v-pre>event:generate</code> 或 <code v-pre>make:listener</code> Artisan 命令为你生成。<code v-pre>Listeners</code> 目录包含处理你的 <a href="https://laravel.com/docs/11.x/events" target="_blank" rel="noopener noreferrer">事件</a> 的类。事件监听器接收事件实例，并在事件触发时执行逻辑。例如，<code v-pre>UserRegistered</code> 事件可能由 <code v-pre>SendWelcomeEmail</code> 监听器处理。</p>
<h4 id="mail-目录" tabindex="-1"><a class="header-anchor" href="#mail-目录"><span>Mail 目录</span></a></h4>
<p>默认情况下，该目录不存在，但可以通过执行 <code v-pre>make:mail</code> Artisan 命令为你生成。<code v-pre>Mail</code> 目录包含应用程序发送的所有 <a href="https://laravel.com/docs/11.x/mail" target="_blank" rel="noopener noreferrer">表示电子邮件的类</a>。邮件对象允许你在一个简单的类中封装构建电子邮件的所有逻辑，并可以使用 <code v-pre>Mail::send</code> 方法发送。</p>
<h4 id="models-目录" tabindex="-1"><a class="header-anchor" href="#models-目录"><span>Models 目录</span></a></h4>
<p><code v-pre>Models</code> 目录包含所有的 <a href="https://laravel.com/docs/11.x/eloquent" target="_blank" rel="noopener noreferrer">Eloquent 模型类</a>。Laravel 的 Eloquent ORM 提供了一个优雅、简单的 ActiveRecord 实现，用于与数据库交互。每个数据库表都有一个对应的 「Model」，用于与该表交互。模型允许你查询表中的数据，也可以向表中插入新记录。</p>
<h4 id="notifications-目录" tabindex="-1"><a class="header-anchor" href="#notifications-目录"><span>Notifications 目录</span></a></h4>
<p>默认情况下，该目录不存在，但可以通过执行 <code v-pre>make:notification</code> Artisan 命令为你生成。<code v-pre>Notifications</code> 目录包含应用程序发送的所有「事务性」 <a href="https://laravel.com/docs/11.x/notifications" target="_blank" rel="noopener noreferrer">通知</a>，例如应用程序内事件的简单通知。Laravel 的通知功能支持通过多种驱动程序发送通知，如电子邮件、Slack、SMS 或存储在数据库中。</p>
<h4 id="policies-目录" tabindex="-1"><a class="header-anchor" href="#policies-目录"><span>Policies 目录</span></a></h4>
<p>默认情况下，该目录不存在，但可以通过执行 <code v-pre>make:policy</code> Artisan 命令为你生成。<code v-pre>Policies</code> 目录包含应用程序的 <a href="https://laravel.com/docs/11.x/authorization" target="_blank" rel="noopener noreferrer">授权策略类</a>。策略用于确定用户是否可以对某个资源执行给定的操作。</p>
<h4 id="providers-目录" tabindex="-1"><a class="header-anchor" href="#providers-目录"><span>Providers 目录</span></a></h4>
<p><code v-pre>Providers</code> 目录包含应用程序的所有 <a href="https://laravel.com/docs/11.x/providers" target="_blank" rel="noopener noreferrer">服务提供者</a>。服务提供者通过绑定服务到服务容器、注册事件或执行其他任务来引导你的应用程序，以准备处理传入的请求。</p>
<p>在一个新的 Laravel 应用程序中，这个目录已经包含 <code v-pre>AppServiceProvider</code>。你可以根据需要添加自己的服务提供者到这个目录。</p>
<h4 id="rules-目录" tabindex="-1"><a class="header-anchor" href="#rules-目录"><span>Rules 目录</span></a></h4>
<p>默认情况下，该目录不存在，但可以通过执行 <code v-pre>make:rule</code> Artisan 命令为你生成。<code v-pre>Rules</code> 目录包含应用程序的自定义验证规则对象。这些验证规则用于将复杂的验证逻辑封装在一个简单的对象中。更多信息请查看 <a href="https://laravel.com/docs/11.x/validation" target="_blank" rel="noopener noreferrer">表单验证</a>。</p>
<blockquote>
<p>本译文仅用于学习和交流目的，转载请务必注明文章译者、出处、和本文链接<br>
我们的翻译工作遵照 <a href="https://learnku.com/docs/guide/cc4.0/6589" target="_blank" rel="noopener noreferrer">CC 协议</a>，如果我们的工作有侵犯到您的权益，请及时联系我们。</p>
</blockquote>
<hr>
<blockquote>
<p>原文地址：<a href="https://learnku.com/docs/laravel/11.x/structuremd/16649" target="_blank" rel="noopener noreferrer">https://learnku.com/docs/laravel/11.x/st...</a></p>
<p>译文地址：<a href="https://learnku.com/docs/laravel/11.x/structuremd/16649" target="_blank" rel="noopener noreferrer">https://learnku.com/docs/laravel/11.x/st...</a></p>
</blockquote>
</div></template>


